#include "SJsonData.h"

SJsonData::SJsonData()
{
	


}

QByteArray SJsonData::toJson() const
{
	m_jdoc.setObject(m_jobj);
	return m_jdoc.toJson(QJsonDocument::JsonFormat::Compact);
}

SJsonData SJsonData::fromJson(const QByteArray& json)
{
	
	auto doc = QJsonDocument::fromJson(json);

	SJsonData jd;
	jd.setObject(doc.object());

	return jd;
}

void SJsonData::setObject(const QJsonObject& object)
{
	m_jobj = object;
}



void SJsonData::addValue(const QString& key, bool v)
{
	m_jobj.insert(key, v);
}

void SJsonData::addValue(const QString& key, double v)
{
	m_jobj.insert(key, v);
}

void SJsonData::addValue(const QString& key, const QString& v)
{
	m_jobj.insert(key, v);
}

void SJsonData::addValue(const QString& key, const QList<double>& list)
{
	QJsonArray arr;
	for (auto v : list)
	{
		arr.append(v);
	}
	m_jobj.insert(key, arr);
}

void SJsonData::addValue(const QString& key, const QStringList& list)
{
	QJsonArray arr;
	for (auto v : list)
	{
		arr.append(v);
	}
	m_jobj.insert(key, arr);

}

bool SJsonData::boolvalue(const QString& key)
{
	if (m_jobj.contains(key))
		return m_jobj.value(key).toBool();
	
	qWarning("key[%s] not found!", qUtf8Printable(key));
	return false;
}

double SJsonData::numvalue(const QString& key)
{
	if (m_jobj.contains(key))
		return m_jobj.value(key).toDouble();

	qWarning("key[%s] not found!", qUtf8Printable(key));
	return 0.0;
}

int SJsonData::integervalue(const QString& key)
{
	if (m_jobj.contains(key))
		return m_jobj.value(key).toInt();

	qWarning("key[%s] not found!", qUtf8Printable(key));
	return 0;
}

QList<double> SJsonData::numberArray(const QString& key)
{
	QList<double> list;

	if (!m_jobj.contains(key))
	{
		qWarning("key[%s] not found!", qUtf8Printable(key));
		return list;
	}
	

	auto jv = m_jobj.value(key);
	if (jv.isArray())
	{
		auto ja = jv.toArray();
		for (int i = 0; i < ja.size(); i++)
		{
			list.append(ja[i].toDouble());
		}
	}
	return list;
}

QStringList SJsonData::stringArray(const QString& key)
{
	QStringList list;

	if (!m_jobj.contains(key))
	{
		qWarning("key[%s] not found!", qUtf8Printable(key));
		return list;
	}


	auto jv = m_jobj.value(key);
	if (jv.isArray())
	{
		auto ja = jv.toArray();
		for (int i = 0; i < ja.size(); i++)
		{
			list.append(ja[i].toString());
		}
	}
	return list;
}


